<?php
require_once('includes.php');
/**
 * 
 *
 * @access public
 * @author Marcos Vinicius Pereira dos Santos, <marcos@eagletecnologia.com>
 * @version 1.0
 * @package PHPJasperReport
 */
class PHPJasperReport {
   
    /**     
     * @access private
     * @var ReportGenerator
     */
    private $generator = null;

    /**     
     * @access private
     * @var String
     */
    private $fileName = null;

    /**     
     * @access private
     * @var String
     */
    private $file = null;

    /**     
     * @access private
     * @var Array
     */
    private $dbConfig = null;

    /**     
     * @access private
     * @var Array
     */
    private $reportParams = null;

    /**    
     * @access private
     * @var String
     */
    private $outputType = null;

    /***************************************************************************
     *                               METHODS
     **************************************************************************/

    /**    
     * @access public    
     * @param  String $format Formato do arquivo que deverá ser gerado.
     * @param  String $lang Linguagem padrão que deverá se utilizada na geração
     * do relatório.
     * @return void
     */
    public function PHPJasperReport($format,$lang = "en"){
        $factory = new FactoryReportGenerator();
        $this->generator = $factory->getInstance($format);

        //Carregando os dados de internacionalização.
        require_once(I18N.strtolower($lang).".php");
    }

    /**
     * Método responsável por seta no nome do arquivo que será gerado.
     * 
     * @access public    
     * @param  String $name
     * @return void
     */
    public function setFileName($name){
        $this->fileName = $name;
    }

    /**
     * Método responsável por seta o nome do arquivo xml que possui a definição
     * do relatório que deve ser gerado.
     * 
     * @access public    
     * @param  String $file
     * @return void
     */
    public function setXMLFile($file){
        $this->file = $file;
    }

    /**
     * Método responsável por seta as configurações de conexão com a base de dados
     * que deverá ser utilizada pelo sistema para gerar o relatório.
     * 
     * @access public    
     * @param  Array $config
     * @return void
     */
    public function setDataBaseConfig(Array $config){
        $this->dbConfig = $config;
    }

    /**
     * Método responsável por seta os parâmentros que serão utilizados pelo
     * sistema durante a geração do relatório.
     * 
     * @access public     
     * @param  Array $params
     * @return void
     */
    public function setReportParams(Array $params){
        $this->reportParams = $params;
    }

    /**
     * Método responsável por seta o tipo de saída a qual deverá se utilizada
     * pelo sistema para a geração do relatório.
     * 
     * @access public
     * @param  String $type
     * @return void
     */
    public function setOutputType($type){
        $this->outputType = $type;
    }    

    /**     
     * @access public    
     * @return void
     */
    public function genarate(){
        try{
            $this->generator->setFileName($this->fileName);
            $this->generator->setDBConfig($this->dbConfig);
            $this->generator->setXMLElement($this->loadFile());
            //$this->generator->setReportParams($this->reportParams);
            $this->generator->generate();
        }catch (Exception $e){
            echo $e->getTraceAsString();
        }
    }

    /**
     * Método responsáveo por carregar o conteudo do arquivo xml para uma
     * instância da classe SimpleXMLElement. Caso o arquivo não exista será
     * lançada uma excessão.
     * 
     * @access private     
     * @return SimpleXMLElement Caso a operação seja bem sucedida será retornado
     * uma instância de SimpleXMLElement, caso contrário, um valor NULL.
     */
    private function loadFile(){
        $returnValue = null;

        if(file_exists($this->file)){
            $returnValue = simplexml_load_file($this->file);
        }else{
            throw new Exception('O arquivo xml que descreve o relatório não foi ser encontrado!');
        }

        return $returnValue;
    }
} 
?>